package org.visionlibrary.image.geomtric.lines.merge.model;

import java.util.List;

import org.visionlibrary.image.event.IProcEventGenerator;
import org.visionlibrary.image.geomtric.model.Vector2d;


/**
 * Klasa abstrakcyjna po ktorej maja dziedziczyc wszystkie klasy odpowiedzialne
 * za scalanie odcinkow. Rozszerza ona klase pozwalajaca na wysylanie zdarzen
 * zwiazanych z praca algorytmu, jezeli taka funkcjonalnosc nie jest konieczna,
 * nalezy zaimplementowac sam interfejs bez rozszerzania tej klasy.
 * <br /><br />
 * Zawiera dwie dodatkowe metody process(List<Vector2d>) oraz post(List<Vector2d>).
 * Metoda process musi byc zaimplementowana przez wszystkie klasy pochodne, tam
 * powinien realizowany byc wlasciwy algorytm scalania.
 * Metoda post nie musi byc implementowana, jest swoistym udogodnieniem i pozwala
 * na realizacje poprawiania uzsykanego zbioru linii w tej samej klasie. Jezeli
 * nie zostanie zaimplementowana zwroci liste podana jako parametr.
 */
public abstract class AbstractLineMerge extends IProcEventGenerator implements LineMerge {
	@Override
	public List<Vector2d> merge(List<Vector2d> lines) {
		return post(process(lines));
	}
	
	protected abstract List<Vector2d> process(List<Vector2d> lines);
	
	protected List<Vector2d> post(List<Vector2d> lines) {
		return lines;
	}
}
